Embodiments relate generally to data transfers in computer systems, and more particularly, to direct memory access (DMA) data transfers.
A computer system, such as a symmetric multiprocessing system, may include multiple server nodes and on each server node there may be multiple processor chips (instances of central processing units). Moreover, each processor chip may include a memory. The processor chips may be connected to a plurality of partitionable endpoints (e.g., input/output adapters). The server nodes may be connected by one or more inter node buses, and the processor chips may be connected by one or more intra node buses.
A central processing unit (CPU) executes instructions contained in a computer program. Certain program instructions, when executed by the CPU, cause data to be transferred from memory to a partitionable endpoint or from a partitionable endpoint to memory. This is sometimes referred to as programmed memory input/output. DMA is another technique for transferring data. Once a DMA transfer is initiated, the data transfer bypasses the CPU. A separate circuit, such as a PCI host bridge (PHB) controller, temporarily takes control of a bus from the CPU and transfers data from memory to a particular partitionable endpoint or from the partitionable endpoint to memory. The memory includes a particular memory address, which contains the data the partitionable endpoint will access in the DMA data transfer, known as a buffer. The buffer may be within a memory that is local to the partitionable endpoint. Alternatively, the buffer may be within a memory that is remote to the partitionable endpoint. In cases where the memory is remotely attached, the memory that contains the buffer may be attached to a server node or processor chip that is different than the server node or processor chip the partitionable endpoint is attached to.